home *** CD-ROM | disk | FTP | other *** search
/ C/C++ Users Group Library 1996 July / C-C++ Users Group Library July 1996.iso / vol_400 / 433_01 / svgadem2.c < prev    next >
C/C++ Source or Header  |  1994-05-08  |  31KB  |  1,214 lines

  1. /****************************************************************************
  2.      
  3.       'SVGACC' A Super Vga Graphics Library for use with Microsoft and
  4.       Borland C/C++
  5.       Copyright 1993-1994 by Stephen L. Balkum and Daniel A. Sill
  6.  
  7.       GIF and 'Graphics Intechange Format' are trademarks (tm) of
  8.       Compuserve, Incorporated, an H&R Block Company.
  9.  
  10.     **************** UNREGISTERD SHAREWARE VERSION ***********************
  11.     * FOR EVUALATION ONLY. NOT FOR RESALE IN ANY FORM. SOFTWARE WRITTEN  *
  12.     * USING THIS UNREGISTERED SHAREWARE GRAPHICS LIBRARY MAY NOT BY SOLD *
  13.     * OR USED FOR ANY PURPOSE OTHER THAN THE EVUALTION OF THIS LIBRARY.  *
  14.     **********************************************************************
  15.  
  16.     **************** NO WARRANTIES AND NO LIABILITY **********************
  17.     * Stephen L. Balkum and Daniel A. Sill provide no warranties, either *
  18.     * expressed or implied, of merchantability, or fitness, for a        *
  19.     * particular use or purpose of this SOFTWARE and documentation.      *
  20.     * In no event shall Stephen L. Balkum or Daniel A. Sill be held      *
  21.     * liable for any damages resulting from the use or misuse of the     * 
  22.     * SOFTWARE and documentation.                                        *
  23.     **********************************************************************
  24.  
  25.     ************** U.S. GOVERNMENT RESTRICTED RIGHTS *********************
  26.     * Use, duplication, or disclosure of the SOFTWARE and documentation  *
  27.     * by the U.S. Government is subject to the restictions as set forth  *
  28.     * in subparagraph (c)(1)(ii) of the Rights in Technical Data and     *
  29.     * Computer Software cluse at DFARS 252.227-7013.                     *
  30.     * Contractor/manufacturer is Stephen L. Balkum and Daniel A. Sill,   *
  31.     * P.O. Box 7704, Austin, Texas 78713-7704                            *
  32.     **********************************************************************
  33.  
  34.     **********************************************************************
  35.     * By using this SOFTWARE or documentation, you agree to the above    *
  36.     * terms and conditions.                                              *
  37.     **********************************************************************
  38.  
  39.  ***************************************************************************/
  40.  
  41. #define MODULE
  42.  
  43. #include <stdio.h>
  44. #include <conio.h>
  45. #include <malloc.h>
  46. #include <string.h>
  47. #include <dos.h>
  48. #include <math.h>
  49.  
  50. #include "svgacc.h"
  51.  
  52. #include "svgademo.h"
  53.  
  54. char showgif(char fname[]);
  55. void showhouse(D2Point *plotarray, D2Point *oplotarray);
  56. void showstar(D2Point *plotarray, D2Point *oplotarray);
  57.  
  58.  
  59. /********
  60.  * DO2D *
  61.  ********/
  62.  
  63. char do2d(void)
  64. {
  65.     int i, trans;
  66.     int spcing, cntx, cnty;
  67.     D2Point pointarray[9];
  68.     D2Point plotarray[9];
  69.     D2Point oplotarray[9];
  70.     char ret;
  71.     char title[TITLEN];
  72.     char buf[TITLEN];
  73.     char buf2[TITLEN];
  74.  
  75.     /*
  76.      * Set up the Title
  77.      */
  78.     sprintf(title,"DEMO 11: 2D functions");
  79.     palset(pal,0,255);
  80.  
  81.     /*
  82.      * Set up the star patter of points
  83.      */
  84.     cntx = maxx / 2;
  85.     cnty = (maxy - 32) / 2 + 32;
  86.     spcing = maxx / 15;
  87.     pointarray[0].x = 0;
  88.     pointarray[0].y = -spcing * 3;
  89.     pointarray[1].x = spcing;
  90.     pointarray[1].y = -spcing;
  91.     pointarray[2].x = spcing * 3;
  92.     pointarray[2].y = 0;
  93.     pointarray[3].x = spcing;
  94.     pointarray[3].y = spcing;
  95.     pointarray[4].x = 0;
  96.     pointarray[4].y = spcing * 3;
  97.     pointarray[5].x = -spcing;
  98.     pointarray[5].y = spcing;
  99.     pointarray[6].x = -spcing * 3;
  100.     pointarray[6].y = 0;
  101.     pointarray[7].x = -spcing;
  102.     pointarray[7].y = -spcing;
  103.     pointarray[8].x = 0;
  104.     pointarray[8].y = -spcing * 3;
  105.  
  106.     /*
  107.      * Show d2translate
  108.      */
  109.     fillscreen(0);
  110.     setview(0,0,maxx,maxy);
  111.     drwstring(1,7,0,title,10,0);
  112.     sprintf(buf,"d2translate(point,xtrans,ytrans,inarray,outarray);");
  113.     drwstring(1,7,0,buf,10,16);
  114.     setview(0,32,maxx,maxy);
  115.     d2translate(9,cntx,cnty,pointarray,plotarray);
  116.     showstar(plotarray,oplotarray);
  117.     ret = getkey();
  118.     if ((ret=='s') || (ret=='q')) {
  119.         fillscreen(0);
  120.         setview(0,0,maxx,maxy);
  121.         return(ret);
  122.     }
  123.     trans = 0;
  124.     for(i=0;i<spcing;i++) {
  125.         trans+=2;
  126.         d2translate(9,cntx+trans,cnty+trans,pointarray,plotarray);
  127.         showstar(plotarray,oplotarray);
  128.         sdelay(2);
  129.     }
  130.     for(i=0;i<spcing;i++) {
  131.         trans-=2;
  132.         d2translate(9,cntx+trans,cnty+trans,pointarray,plotarray);
  133.         showstar(plotarray,oplotarray);
  134.         sdelay(2);
  135.     }
  136.     ret = getkey();
  137.     if ((ret=='s') || (ret=='q')) {
  138.         fillscreen(0);
  139.         setview(0,0,maxx,maxy);
  140.         return(ret);
  141.     }
  142.  
  143.     /*
  144.      * Show d2scale
  145.      */
  146.     setview(0,16,maxx,31);
  147.     fillview(0);
  148.     setview(0,16,maxx,maxy);
  149.     sprintf(buf,"d2scale(points,xscale,yscale,inarray,outarray);");
  150.     drwstring(1,7,0,buf,10,16);
  151.     setview(0,32,maxx,maxy);
  152.     d2translate(9,cntx,cnty,pointarray,plotarray);
  153.     showstar(plotarray,oplotarray);
  154.     for(i=256;i<=380;i+=4) {
  155.         d2scale(9,i,i,pointarray,plotarray);
  156.         d2translate(9,cntx,cnty,plotarray,plotarray);
  157.         showstar(plotarray,oplotarray);
  158.         sdelay(2);
  159.     }
  160.     for(i=384;i>=128;i-=4) {
  161.         d2scale(9,i,i,pointarray,plotarray);
  162.         d2translate(9,cntx,cnty,plotarray,plotarray);
  163.         showstar(plotarray,oplotarray);
  164.         sdelay(2);
  165.     }
  166.     for(i=124;i<=256;i+=4) {
  167.         d2scale(9,i,i,pointarray,plotarray);
  168.         d2translate(9,cntx,cnty,plotarray,plotarray);
  169.         showstar(plotarray,oplotarray);
  170.         sdelay(2);
  171.     }
  172.     ret = getkey();
  173.     if ((ret=='s') || (ret=='q')) {
  174.         fillscreen(0);
  175.         setview(0,0,maxx,maxy);
  176.         return(ret);
  177.     }
  178.  
  179.     /*
  180.      * Show d2rotate
  181.      */
  182.     setview(0,16,maxx,31);
  183.     fillview(0);
  184.     setview(0,16,maxx,maxy);
  185.     sprintf(buf,"d2rotate(points,xorigin,yorigin,angle,inarray,outarray);");
  186.     drwstring(1,7,0,buf,10,16);
  187.     sprintf(buf2,"Let's do it about the center of the object.");
  188.     drwstring(1,7,0,buf2,10,32);
  189.     setview(0,48,maxx,maxy);
  190.     d2translate(9,cntx,cnty,pointarray,plotarray);
  191.     showstar(plotarray,oplotarray);
  192.     for(i=0;i<=180;i++) {
  193.         d2rotate(9,0,0,i,pointarray,plotarray);
  194.         d2translate(9,cntx,cnty,plotarray,plotarray);
  195.         showstar(plotarray,oplotarray);
  196.         sdelay(2);
  197.     }
  198.     for(i=180;i>=0;i-=2) {
  199.         d2rotate(9,0,0,i,pointarray,plotarray);
  200.         d2translate(9,cntx,cnty,plotarray,plotarray);
  201.         showstar(plotarray,oplotarray);
  202.         sdelay(2);
  203.     }
  204.     ret = getkey();
  205.     if ((ret=='s') || (ret=='q')) {
  206.         fillscreen(0);
  207.         setview(0,0,maxx,maxy);
  208.         return(ret);
  209.     }
  210.  
  211.     /*
  212.      * Show d2rotate (about an arbitrary point)
  213.      */
  214.     setview(0,16,maxx,48);
  215.     fillview(0);
  216.     setview(0,16,maxx,maxy);
  217.     sprintf(buf,"d2rotate(points,xorigin,yorigin,angle,inarray,outarray);");
  218.     drwstring(1,7,0,buf,10,16);
  219.     sprintf(buf2,"Let's do it about an arbitrary point.");
  220.     drwstring(1,7,0,buf2,10,32);
  221.     setview(0,48,maxx,maxy);
  222.     d2translate(9,cntx,cnty,pointarray,plotarray);
  223.     showstar(plotarray,oplotarray);
  224.     for(i=0;i<=360;i+=2) {
  225.         d2rotate(9,0,spcing*3,i,pointarray,plotarray);
  226.         d2translate(9,cntx,cnty,plotarray,plotarray);
  227.         showstar(plotarray,oplotarray);
  228.         sdelay(2);
  229.     }
  230.     ret = getkey();
  231.     
  232.     fillscreen(0);
  233.     setview(0,0,maxx,maxy);
  234.     
  235.     return(ret);
  236.  
  237. }
  238.  
  239. /********
  240.  * DO3D *
  241.  ********/
  242.  
  243. char do3d(void)
  244. {
  245.     float pi;
  246.     int i;
  247.     float height, radius;
  248.     int spcing;
  249.     D3Point pointarray[14];
  250.     D3Point playarray[14];
  251.     D2Point plotarray[14];
  252.     D2Point oplotarray[14];
  253.     ProjParameters proj;
  254.     char ret;
  255.     char title[TITLEN];
  256.     char buf[TITLEN];
  257.     
  258.  
  259.     /*
  260.      * Set up the Title
  261.      */
  262.     sprintf(title,"DEMO 12: 3D functions");
  263.     palset(pal,0,255);
  264.  
  265.     /*
  266.      * Set up the house pattern of points
  267.      */
  268.     spcing = maxx / 6;
  269.     pointarray[0].x = -spcing;
  270.     pointarray[0].y = -spcing * 2;
  271.     pointarray[0].z = 0;
  272.     pointarray[1].x = spcing;
  273.     pointarray[1].y = -spcing * 2;
  274.     pointarray[1].z = 0;
  275.     pointarray[2].x = spcing;
  276.     pointarray[2].y = -spcing * 2;
  277.     pointarray[2].z = spcing * 2;
  278.     pointarray[3].x = -spcing;
  279.     pointarray[3].y = -spcing * 2;
  280.     pointarray[3].z = spcing * 2;
  281.     pointarray[4].x = -spcing;
  282.     pointarray[4].y = spcing * 2;
  283.     pointarray[4].z = 0;
  284.     pointarray[5].x = spcing;
  285.     pointarray[5].y = spcing * 2;
  286.     pointarray[5].z = 0;
  287.     pointarray[6].x = spcing;
  288.     pointarray[6].y = spcing * 2;
  289.     pointarray[6].z = spcing * 2;
  290.     pointarray[7].x = -spcing;
  291.     pointarray[7].y = spcing * 2;
  292.     pointarray[7].z = spcing * 2;
  293.     pointarray[8].x = 0;
  294.     pointarray[8].y = -spcing * 2;
  295.     pointarray[8].z = sp